package com.qinggeng.project.system.service;

import java.util.List;

import com.qinggeng.project.api.dto.CartDto;
import com.qinggeng.project.system.domain.Orders;
import com.qinggeng.project.system.domain.UserGoodsLimitRecord;

/**
 * 用户商品限购记录Service接口
 *
 * @author smallfish
 * @date 2020-12-05
 */
public interface IUserGoodsLimitRecordService
{
    /**
     * 查询用户商品限购记录
     *
     * @param recordId 用户商品限购记录ID
     * @return 用户商品限购记录
     */
    public UserGoodsLimitRecord getUserGoodsLimitRecordById(Long recordId);

    UserGoodsLimitRecord getUserGoodsLimitRecordByUserIdAndGoodsId(Long userId,Long GoodsId);

    /**
     * 查询用户商品限购记录列表
     *
     * @param userGoodsLimitRecord 用户商品限购记录
     * @return 用户商品限购记录集合
     */
    public List<UserGoodsLimitRecord> listUserGoodsLimitRecord(UserGoodsLimitRecord userGoodsLimitRecord);

    /**
     * 新增用户商品限购记录
     *
     * @param userGoodsLimitRecord 用户商品限购记录
     * @return 结果
     */
    public int insertUserGoodsLimitRecord(UserGoodsLimitRecord userGoodsLimitRecord);

    /**
     * 修改用户商品限购记录
     *
     * @param userGoodsLimitRecord 用户商品限购记录
     * @return 结果
     */
    public int updateUserGoodsLimitRecord(UserGoodsLimitRecord userGoodsLimitRecord);

    boolean updateUserGoodsGoodsLimitRecordBuyNum(Long recordId,int buyNum);

    /**
     * 批量删除用户商品限购记录
     *
     * @param recordIds 需要删除的用户商品限购记录ID
     * @return 结果
     */
    public int deleteUserGoodsLimitRecordByIds(Long[] recordIds);

    /**
     * 删除用户商品限购记录信息
     *
     * @param recordId 用户商品限购记录ID
     * @return 结果
     */
    public int deleteUserGoodsLimitRecordById(Long recordId);

    /**
     * 获取商品加入购物车数量
     * @param goodsId
     * @param
     * @return
     */
    Integer getUserGoodsLimitRemainNum(Long goodsId);

    /**
     * 检查今日是否已被限购
     * @param goodsId
     * @param cartNum
     * @return
     */
    boolean checkIsGoodsLimit(Long goodsId,Integer goodsNum,Integer cartNum);


    /**
     * 根据订单批量插入订单商品中的限购商品购买记录
     * @param orders
     * @return
     */
    int insertUserGoodsLimitRecord(Orders orders);
    /**
     * 批量检查今日是否已被限购(校验库存)
     * @param cartDtos
     * @return
     */
    boolean checkIsGoodsLimitList(List<CartDto> cartDtos,List<String> loseGoodsNameList);
    /**
     * 批量检查今日是否已被限购(不校验库存)
     * @param cartDtos
     * @return
     */
    boolean checkIsGoodsLimitList(List<CartDto> cartDtos);
}
